package com.typ.blog.controller;

import com.github.pagehelper.PageInfo;
import com.typ.blog.entity.User;
import com.typ.blog.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Objects;

/**
 * 路径：com.typ.blog.controller.UserController.java
 * 类名：UserController.java
 * 功能：用户信息
 * 备注：
 * 创建人：typ
 * 创建时间：2019/10/21 21:46
 * 修改人：
 * 修改备注：
 * 修改时间：
 */
@Slf4j
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 方法名：login
     * 功能：登录页面跳转
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/12 21:26
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("login")
    public String login() {
        return "admin/login";
    }

    /**
     * 方法名：register
     * 功能：注册页面跳转
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/14 21:38
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("register")
    public String register() {
        return "admin/register";
    }

    /**
     * 方法名：loginSub
     * 功能：登录提交
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/12 21:26
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("loginSub")
    public String loginSub(String username, String password, Model model, HttpSession session) {
        User user = userService.login(username);
        if (!Objects.isNull(user)) {
            if (Objects.equals(password, user.getPassword())) {
                session.setAttribute("user", user);
                return "redirect:home";
            } else {
                model.addAttribute("msg", "用户名或密码有误");
                return "admin/login";
            }
        } else {
            model.addAttribute("msg", "用户名或密码有误");
            return "admin/login";
        }
    }

    /**
     * 方法名：registerSub
     * 功能：注册用户
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/12 21:26
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("registerSub")
    public String registerSub(User user) {
        int rows = userService.save(user);
        if (rows > 0) {
            return "redirect:login";
        } else {
            return "admin/register";
        }
    }

    /**
     * 方法名：logout
     * 功能：退出
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/18 20:58
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("logout")
    public String logout(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.invalidate();
        return "redirect:index";
    }

    /**
     * 方法名：userList
     * 功能：用户列表
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/24 14:30
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("userList")
    public String userList(Model model,
                           @RequestParam(required = false, defaultValue = "1") Integer pageNum,
                           @RequestParam(required = false, defaultValue = "10") Integer pageSize,
                           @RequestParam(required = false, defaultValue = "") String search) {

        PageInfo<User> userList = userService.list(pageNum, pageSize, search);
        model.addAttribute("uList", userList);
        model.addAttribute("search", search);
        model.addAttribute("active","userList");
        return "admin/userList";
    }

    /**
     * 方法名：userEdit
     * 功能：修改用户信息
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/26 21:09
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("userEdit")
    public String userEdit(User user, Model model){
        int rows = userService.save(user);
        if (rows > 0){
            model.addAttribute("msg", "修改成功！");
            return "redirect:userList";
        }
        model.addAttribute("msg","修改失败！");
        return "admin/userEdit";
    }

    /**
     * 方法名：userDel
     * 功能：删除用户
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/26 21:11
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("userDel")
    public String userDel(Integer id, Model model){
        int rows = userService.del(id);
        if(rows > 0){
            model.addAttribute("msg","删除成功！");
            return "redirect:userList";
        }
        model.addAttribute("msg","删除失败！");
        return "redirect:userList";
    }

    @RequestMapping("updPwd")
    public String updPwd(Model model) {
        model.addAttribute("active","updPwd");
        return "admin/updPwd";
    }

    /**
     * 方法名：updPwdSub
     * 功能：修改密码
     * 描述：
     * 创建人：typ
     * 创建时间：2019/11/26 21:28
     * 修改人：
     * 修改描述：
     * 修改时间：
     */
    @RequestMapping("updPwdSub")
    public String updPwdSub(HttpSession session, Model model, String oldPassword, String newPassword, String password){
        if(!Objects.equals(newPassword,password)){
            model.addAttribute("msg", "两次输入的密码不符...");
            return "admin/updPwd";
        }

        Integer id = ((User)session.getAttribute("user")).getId();
        // 根据id获取用户信息
        User user = userService.qryByUserId(id);
        if(!Objects.isNull(user) && Objects.equals(oldPassword, user.getPassword())){
            int rows = userService.updPwd(id, password);
            if(rows > 0){
                model.addAttribute("msg", "修改成功！");
                return "redirect:userList";
            }
            model.addAttribute("msg","修改失败！");
            return "admin/updPwd";
        }
        model.addAttribute("msg", "输入的原密码有误！");
        return "admin/updPwd";
    }
}
